const crypto = require("crypto");

/**
 * 将日期对象格式化成字符串形式
 * @param {Date} date 日期对象
 */
function dateFormat(date) {
    if (date instanceof Date) {
        const Y = date.getFullYear();
        const M = String(date.getMonth() + 1).padStart(2, "0");
        const D = String(date.getDate()).padStart(2, "0");

        const hh = String(date.getHours()).padStart(2, "0");
        const mm = String(date.getMinutes()).padStart(2, "0");
        const ss = String(date.getSeconds()).padStart(2, "0");
        return `${Y}-${M}-${D} ${hh}:${mm}:${ss}`;
    }
}

/**
 * 借助数组方法，来判断是否回文字符串
 * @param {*} str
 */
function isHuiwen(str) {
    // '12321'
    // abba
    // abccbb
    return [...str].reverse().join("") === str;
}

/**
 * 手写判断字符串是不是回文字符串
 * @param {string} str 任意一个字符串
 */
function isPalindrome(str) {
    let left = 0;
    let right = str.length - 1;
    while (left < right) {
        if (str[left] !== str[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

/**
 * 将手机号格式化成 3 4 4 形式
 * 11 => 3 4 4 => 138 1106 5680
 * @param {string} number 要格式化的手机号
 */
function formatPhoneNumber(number) {
    return `${number.substring(0, 3)} ${number.substring(
        3,
        7
    )} ${number.substring(7, 11)}`;
}

/**
 * 将字符串数字格式化成每个 3 个数字加一个逗号的形式
 * @param {string} str 要格式化的数字字符串
 */
function formatNumber(number) {
    let arr = String(number).split("");
    for (i = arr.length - 3; i > 0; i = i - 3) {
        arr.splice(i, 0, ",");
    }
    console.log(arr.join(""));
}

formatNumber(12345678910);

// JS 里面的数据类型
// number、string、boolean、null、undefined、Object
module.exports = {
    /**
     * 将传入的明文密码加密，返回的是加密的密码字符串
     * @param {string} rawPassword 明文密码
     */
    passwordEncoder(rawPassword) {
        // 首先要创建一个加密函数
        return crypto
            .createHmac("sha256", "1232hi13j")
            .update(rawPassword)
            .digest("hex");
    },
    dateFormat,
};
